#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<stdlib.h>
struct ListNode
{
	struct ListNode* next;
	int val;

};
//
//struct ListNode* BuyNode(int i)
//{
//	struct ListNode* newnode = (struct ListNode*)malloc(sizeof(struct ListNode));
//	if (newnode == NULL)
//	{
//		perror("malloc failed");
//		return NULL;
//	}
//
//	newnode->val = i;
//	newnode->next = NULL;
//
//	return newnode;
//
//}
//struct ListNode* CreatList(int n)
//{
//	int i = 1;
//	struct ListNode* head = NULL;
//	struct ListNode* tail = NULL;
//
//	while (i <= n)
//	{
//
//		struct ListNode* newnode = BuyNode(i++);
//		if (tail == NULL)
//		{
//			head = tail = newnode;
//		}
//		else
//		{
//			tail->next = newnode;
//			tail = tail->next;
//		}
//	}
//	tail->next = head;
//
//	return head;
//}
//
//int ysf(int n, int m) {
//
//	struct ListNode* head = CreatList(n);
//
//	struct ListNode* cur = head;
//	struct ListNode* prev = NULL;
//	int i = 1;
//
//	while (cur != cur->next)
//	{
//		if (i == m)
//		{
//			prev->next = cur->next;
//			cur = prev->next;
//			i = 1;
//		}
//		else
//		{
//			prev = cur;
//			cur = cur->next;
//			i++;
//		}
//	}
//	return cur->val;
//
//}
//
//int main()
//{
//	int val = ysf(5, 2);
//
//	printf("%d", val);
//}




//#include <stdio.h>
//#include<stdlib.h>
//#include<string.h>
//void MergeSort(int* a, int* tmp, int begin, int end) {
//
//	if (begin >= end)
//		return;
//
//	int mid = (begin + end) / 2;
//	MergeSort(a, tmp, begin, mid);
//	MergeSort(a, tmp, mid + 1, end);
//	int begin1 = begin;
//	int end1 = mid;
//	int begin2 = mid + 1;
//	int end2 = end;
//	int index = begin;
//	while (begin1 <= end1 && begin2 <= end2) {
//		if (a[begin1] < a[begin2]) {
//			tmp[index++] = a[begin1++];
//		}
//		else {
//			tmp[index++] = a[begin2++];
//		}
//	}
//	while (begin1 <= end1) {
//		tmp[index++] = a[begin1++];
//	}
//	while (begin2 <= end2) {
//		tmp[index++] = a[begin2++];
//	}
//	memcpy(a + begin, tmp + begin, sizeof(int) * (end - begin + 1));
//}
//void _MergeSort(int* a, int n) {
//	int* tmp = (int*)malloc(sizeof(int) * n);
//	if (tmp == NULL) {
//		perror("malloc failed");
//		return;
//	}
//	MergeSort(a, tmp, 0, n - 1);
//	free(tmp);
//}
//int main() {
//	int n = 0;
//	scanf("%d", &n);
//	int a[] = { 0 };
//
//	for (int i = 0; i < n; i++) {
//		scanf("%d", &a[i]);
//	}
//	_MergeSort(a, n);
//	for (int i = 0; i < n; i++) {
//		printf("%d", a[i]);
//	}
//	return 0;
//}


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int sumOfLeftLeaves(struct TreeNode* root) {

	if (root == NULL)
		return 0;
	int sum = 0;
	if (root->left && root->left->left ==
		NULL && root->left->right == NULL)
	{
		sum = root->left->val;
	}
	return sum + sumOfLeftLeaves(root->left) +
		sumOfLeftLeaves(root->right);
}